/**
 * 设置存储工具类
 * 统一管理所有设置的本地存储
 */

class SettingsStorage {
  constructor() {
    this.prefix = 'settings_'
  }
  
  /**
   * 保存设置
   * @param {String} key - 设置键名
   * @param {*} value - 设置值
   * @returns {Boolean} 是否保存成功
   */
  save(key, value) {
    try {
      const storageKey = this.prefix + key
      uni.setStorageSync(storageKey, JSON.stringify(value))
      console.log(`[SettingsStorage] 保存设置成功: ${key}`)
      return true
    } catch (error) {
      console.error(`[SettingsStorage] 保存设置失败: ${key}`, error)
      return false
    }
  }
  
  /**
   * 读取设置
   * @param {String} key - 设置键名
   * @param {*} defaultValue - 默认值
   * @returns {*} 设置值
   */
  load(key, defaultValue = null) {
    try {
      const storageKey = this.prefix + key
      const value = uni.getStorageSync(storageKey)
      
      if (value) {
        const parsed = JSON.parse(value)
        console.log(`[SettingsStorage] 读取设置成功: ${key}`)
        return parsed
      }
      
      console.log(`[SettingsStorage] 设置不存在，使用默认值: ${key}`)
      return defaultValue
    } catch (error) {
      console.error(`[SettingsStorage] 读取设置失败: ${key}`, error)
      return defaultValue
    }
  }
  
  /**
   * 删除设置
   * @param {String} key - 设置键名
   * @returns {Boolean} 是否删除成功
   */
  remove(key) {
    try {
      const storageKey = this.prefix + key
      uni.removeStorageSync(storageKey)
      console.log(`[SettingsStorage] 删除设置成功: ${key}`)
      return true
    } catch (error) {
      console.error(`[SettingsStorage] 删除设置失败: ${key}`, error)
      return false
    }
  }
  
  /**
   * 清空所有设置
   * @returns {Boolean} 是否清空成功
   */
  clear() {
    try {
      const info = uni.getStorageInfoSync()
      let count = 0
      
      info.keys.forEach(key => {
        if (key.startsWith(this.prefix)) {
          uni.removeStorageSync(key)
          count++
        }
      })
      
      console.log(`[SettingsStorage] 清空所有设置成功，共删除 ${count} 项`)
      return true
    } catch (error) {
      console.error('[SettingsStorage] 清空设置失败:', error)
      return false
    }
  }
  
  /**
   * 获取所有设置键名
   * @returns {Array} 设置键名列表
   */
  getAllKeys() {
    try {
      const info = uni.getStorageInfoSync()
      const keys = info.keys
        .filter(key => key.startsWith(this.prefix))
        .map(key => key.substring(this.prefix.length))
      
      console.log(`[SettingsStorage] 获取所有设置键名: ${keys.length} 项`)
      return keys
    } catch (error) {
      console.error('[SettingsStorage] 获取设置键名失败:', error)
      return []
    }
  }
  
  /**
   * 导出所有设置
   * @returns {Object} 所有设置的对象
   */
  exportAll() {
    try {
      const keys = this.getAllKeys()
      const settings = {}
      
      keys.forEach(key => {
        settings[key] = this.load(key)
      })
      
      console.log(`[SettingsStorage] 导出所有设置: ${keys.length} 项`)
      return settings
    } catch (error) {
      console.error('[SettingsStorage] 导出设置失败:', error)
      return {}
    }
  }
  
  /**
   * 导入设置
   * @param {Object} settings - 设置对象
   * @returns {Boolean} 是否导入成功
   */
  importAll(settings) {
    try {
      let count = 0
      
      Object.keys(settings).forEach(key => {
        if (this.save(key, settings[key])) {
          count++
        }
      })
      
      console.log(`[SettingsStorage] 导入设置成功: ${count} 项`)
      return true
    } catch (error) {
      console.error('[SettingsStorage] 导入设置失败:', error)
      return false
    }
  }
}

// 导出单例
export default new SettingsStorage()
